#pragma once
#include <map>
class RenderView;
class RenderTarget;

class SceneManager
{
public:
	friend class Root;

public:
	const std::string& getName() const { return mName; }
	Scene* getScene() { return mScene; }

	void Render(Camera* camera, RenderTarget* renderTarget);
	void Update(float elapsedTime);

private:
	const std::string mName;
	Scene* mScene;

	SceneManager(const std::string& name);
	virtual ~SceneManager(void);

	void InitView(RenderView* view);
	void RenderObjects(int group, RenderView* view);
	void RenderDepthPass(int group, RenderView* view);
	void RenderBasePass(int group, RenderView* view);
	void RenderLightingPass(int group, RenderView* view);
	void RenderTransparents(int group, RenderView* view);
	void RenderPostprocess(int group, RenderView* view);
};